package v1

import (
	metav1 "gluenet/internal/agent/api/meta/v1"

	corev1 "k8s.io/api/core/v1"
)

type GluenetRequest struct {
	GluenetMeta `json:",inline"`
	Spec        interface{} `json:"spec,omitempty"`
	Options     interface{} `json:"options,omitempty"`
}

type GluenetAgent struct {
	GluenetMeta `json:",inline"`
	Spec        Agent `json:"spec"`
}

type GluenetHost struct {
	GluenetMeta `json:",inline"`
	Spec        Host `json:"spec"`
}

type DockerContainer struct {
	GluenetMeta `json:",inline"`
	Spec        Container        `json:"spec"`
	Options     ContainerOptions `json:"options"`
}

type HelmRelease struct {
	GluenetMeta `json:",inline"`
	Spec        Release              `json:"spec"`
	Options     metav1.CreateOptions `json:"options"`
}

type K8sService struct {
	GluenetMeta `json:",inline"`
	Spec        corev1.Service `json:"spec"`
}

type K8sPod struct {
	GluenetMeta `json:",inline"`
	Spec        corev1.Pod `json:"spec"`
}

type KubeVirtVirtualMachine struct {
	GluenetMeta `json:",inline"`
	Spec        VirtualMachine `json:"spec"`
}

type KubeVirtVirtualMachineService struct {
	GluenetMeta `json:",inline"`
	Spec        VirtualMachineService `json:",inline"`
}

type KubeVirtVirtualMachineInstance struct {
	GluenetMeta `json:",inline"`
	Spec        VirtualMachineInstance `json:"spec"`
}
